/*
 * canttchartview.h
 * 甘特图视图头文件
 * 定义了甘特图的视图类，负责显示甘特图场景和处理用户交互
 */
#ifndef CANTTCHARTVIEW_H
#define CANTTCHARTVIEW_H

#include <QGraphicsView>
#include <QDateTime>

class CanttChartScene;
class CanttTimeBarItem;

/**
 * @class CanttChartView
 * @brief 甘特图视图类
 * @details 继承自QGraphicsView，负责显示甘特图场景，处理缩放等用户交互，
 *          以及转发对场景的操作请求
 */
class CanttChartView : public QGraphicsView
{
    Q_OBJECT
public:
    /**
     * @brief 构造函数
     * @param parent 父窗口指针，默认为0
     */
    explicit CanttChartView(QWidget *parent = 0);

    /**
     * @brief 设置时间轴范围
     * @param start 开始时间
     * @param end 结束时间
     * @param platforms 平台列表
     */
    void setAxisRange(const QDateTime &start, const QDateTime &end, const QStringList &platforms);

    /**
     * @brief 添加计划时间条
     * @param platform 平台名称
     * @param start 开始时间
     * @param end 结束时间
     * @return 返回创建的时间条项
     */
    CanttTimeBarItem *addPlanTimeBar(const QString &platform, const QDateTime &start, const QDateTime &end);

    /**
     * @brief 添加实际时间条
     * @param platform 平台名称
     * @param start 开始时间
     * @param end 结束时间
     * @return 返回创建的时间条项
     */
    CanttTimeBarItem *addRealTimeBar(const QString &platform, const QDateTime &start, const QDateTime &end);

    /**
     * @brief 设置时间步长值
     * @param time 时间步长
     */
    void setStepTimeValue(const QTime &time);

protected:
    /**
     * @brief 重写鼠标滚轮事件，处理缩放
     * @param event 滚轮事件
     */
    virtual void wheelEvent(QWheelEvent *) override;

private slots:
    /**
     * @brief 放大视图
     */
    void zoomIn();

    /**
     * @brief 缩小视图
     */
    void zoomOut();

private:
    /**
     * @brief 按比例缩放视图
     * @param factor 缩放因子
     */
    void scaleBy(double factor);

private:
    /**
     * @brief 甘特图场景指针
     */
    CanttChartScene *m_pScene;
};

#endif // CANTTCHARTVIEW_H
